﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ShellAnywhere.Model
{
	public interface IToken<T> where T : IParam
	{
		#region props
		int Dot { get; }
		char LastChar { get; }
		char CharAtDot { get; }
		T Child { get; }
		List<T> Children { get; }
		int Count { get; }
		bool IsMatched { get; }
		bool HasChildren { get; }
		bool HasOneChild { get; }
		List<T> Matched { get; }
		List<T> Unmatched { get; }
		#endregion props

		#region methods
		IToken<T> Constrain(Func<T, bool> predicate);
		IToken<T> Constrain(Func<T, int, bool> predicate);
		#endregion methods

		#region events
		#endregion events
	}
}
